// 数据库配置文件
// 在生产环境中可以根据需要修改这些配置

import { getCurrentConfig } from './environment.js'
import { getLastMonthEndDate } from '../utils/dateUtils.js'

const DATABASE_CONFIG = {
  // 数据库 Schema 名称
  SCHEMA_NAME: 'amsedb',
  
  // 主要数据表配置
  TABLES: {
    // 指标数据表
    INDICATOR_TABLE: 'audit_index_total'
  },
  
  // 默认查询条件
  DEFAULT_CONDITIONS: {
    // 默认机构号 (总行)
    DEFAULT_ORG_NO: '00000',
    
    // 默认查询条数限制
    DEFAULT_LIMIT: 12
  },
  
  // API 端点配置
  API: {
    // JDBC 管理器端点
    JDBC_ENDPOINT: '/coolv/edatasource/jdbcmgr.do',
    
    // 请求参数配置
    REQUEST_PARAMS: {
      action: 'exesql',
      jdbcName: 'amsedb',
      enc: 'true',
      pageSize: '100',
      isSys: 'false'
    }
  },
  
  // SQL 模板配置 - 使用函数形式，确保运行时获取正确的环境配置
  SQL_TEMPLATES: {
    // 获取指标数据的 SQL 模板
    GET_INDICATOR_DATA: (indicatorName, orgNo = null, extraWhere = '', limit = null) => {
      const envConfig = DATABASE_CONFIG.getCurrentEnvConfig()
      const org = orgNo || envConfig.DEFAULT_CONDITIONS.DEFAULT_ORG_NO
      const limitClause = limit || envConfig.DEFAULT_CONDITIONS.DEFAULT_LIMIT
      const tableName = envConfig.TABLES.INDICATOR_TABLE
      // 动态获取上个月月末日期
      const lastMonthEnd = getLastMonthEndDate()
      // 明确指定字段顺序，确保所有环境返回一致的数据格式
      // amsedb 使用 MySQL 数据库，使用 LIMIT 语法
      // 只查询上个月月末及之前的数据（取最新的limit条）
      return `select buss_dt, index_nm, org_no, index_value, ori from ${tableName} where index_nm='${indicatorName}' and org_no='${org}' and buss_dt<='${lastMonthEnd}'${extraWhere} order by buss_dt desc limit ${limitClause}`
    },
    
    // 搜索指标名称的 SQL 模板
    SEARCH_INDICATORS: (keyword, orgNo = null) => {
      const envConfig = DATABASE_CONFIG.getCurrentEnvConfig()
      const org = orgNo || envConfig.DEFAULT_CONDITIONS.DEFAULT_ORG_NO
      const tableName = envConfig.TABLES.INDICATOR_TABLE
      return `select distinct index_nm from ${tableName} where index_nm like '%${keyword}%' and org_no='${org}' order by index_nm`
    },
    
    // 获取所有机构号的 SQL 模板
    GET_ALL_ORG_NOS: () => {
      const envConfig = DATABASE_CONFIG.getCurrentEnvConfig()
      const tableName = envConfig.TABLES.INDICATOR_TABLE
      return `select distinct org_no from ${tableName} order by org_no`
    },
    
    // 获取最新业务日期的 SQL 模板
    GET_LATEST_DATES: (limit = 5) => {
      const envConfig = DATABASE_CONFIG.getCurrentEnvConfig()
      const tableName = envConfig.TABLES.INDICATOR_TABLE
      // amsedb 使用 MySQL 数据库
      return `select distinct buss_dt from ${tableName} order by buss_dt desc limit ${limit}`
    }
  },
  
  // 环境配置
  ENVIRONMENT: {
    // 开发环境配置
    development: {
      SCHEMA_NAME: 'amsedb',
      TABLES: {
        INDICATOR_TABLE: 'audit_index_total'
      },
      DEFAULT_CONDITIONS: {
        DEFAULT_ORG_NO: '00000',
        DEFAULT_LIMIT: 12
      }
    },
    
    // 生产环境配置 (示例)
    production: {
      SCHEMA_NAME: 'prod_schema',  // 生产环境可能使用不同的 schema
      TABLES: {
        INDICATOR_TABLE: 'audit_index_total'  // 生产环境可能使用不同的表名
      },
      DEFAULT_CONDITIONS: {
        DEFAULT_ORG_NO: '00000',
        DEFAULT_LIMIT: 12
      }
    },
    
    // 测试环境配置 (示例)
    test: {
      SCHEMA_NAME: 'test_schema',
      TABLES: {
        INDICATOR_TABLE: 'audit_index_total'
      },
      DEFAULT_CONDITIONS: {
        DEFAULT_ORG_NO: '00000',
        DEFAULT_LIMIT: 12
      }
    }
  },
  
  // 获取当前环境配置的方法
  getCurrentEnvConfig() {
    // 使用 environment.js 中的配置
    const envConfig = getCurrentConfig()
    
    // 合并当前环境配置到主配置
    return {
      ...this,
      SCHEMA_NAME: envConfig.SCHEMA_NAME,
      TABLES: { ...this.TABLES, ...envConfig.TABLES },
      DEFAULT_CONDITIONS: { ...this.DEFAULT_CONDITIONS, ...envConfig.DEFAULT_CONDITIONS },
      DATA_FORMAT: envConfig.DATA_FORMAT,
      API: { ...this.API, ...envConfig.API }
    }
  }
}

export default DATABASE_CONFIG
